<?php
Class Lingua 
{
	// Define all available languages.
	// WARNING: uncomment all available languages
	private $_LANG = array(
	'af',    //    afrikaans.
	'ar',    //    arabic.
	'bg',    //    bulgarian.
	'ca',    //    catalan.
	'cs',    //    czech.
	'da',    //    danish.
//	'de',    //    german.
	'el',    //    greek.
//	'en',    //    english.
//	'es',    //    espanhol.
	'et',    //    estonian.
	'fi',    //    finnish.
//	'fr',    //    french.
	'gl',    //    galician.
	'he',    //    hebrew.
	'hi',    //    hindi.
	'hr',    //    croatian.
	'hu',    //    hungarian.
	'id',    //    indonesian.
//	'it',    //    italian.
	'ja',    //    japanese.
	'ko',    //    korean.
	'ka',    //    georgian.
	'lt',    //    lithuanian.
	'lv',    //    latvian.
	'ms',    //    malay.
	'nl',    //    dutch.
	'no',    //    norwegian.
	'pl',    //    polish.
//	'pt',    //    portuguese.
	'ro',    //    romanian.
	'ru',    //    russian.
	'sk',    //    slovak.
	'sl',    //    slovenian.
	'sq',    //    albanian.
	'sr',    //    serbian.
	'sv',    //    swedish.
	'th',    //    thai.
	'tr',    //    turkish.
	'uk',    //    ukrainian.
	'zh'     //    chinese.
);

				
    private $registry;
	private $vars = array();
	private $path;
	private $lingua = '';
	private $lingua_id = 0;
	// Define default language.
	private $_DLANG = 'pt';

    function __construct($registry) {
        $this->registry = $registry;
		$this->path = site_path . 'views';

    // Example Implementations
		// Redirect to the correct location.
		//header('location: http://www.your_site.com/index_'.lixlpixel_detect_lang().'.php');
		// simply display the detected language
		//echo '<p>the language detected is: ' . $this->lixlpixel_detect_lang() . '</p>';
		
		$dominio = $_SERVER['HTTP_HOST'];
		$parts = explode('.',  $dominio);
		//echo '<p>elementos : ' . count($parts) . ';--' . $dominio .'</p>';
		if( count($parts) != 3 )
		{
			$this->lingua = $this->lixlpixel_detect_lang();
		} else {
			if($parts[0] == 'www')
			{
				$this->lingua = $this->_DLANG;
			} else if($parts[0] == 'pt'){
				if( $this->idioma_activo('pt') == 1)
				{
					$this->lingua = 'pt';
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else if($parts[0] == 'fr'){
				if( $this->idioma_activo('fr') == 1)
				{
					$this->lingua = 'fr';
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else if($parts[0] == 'en'){
				if( $this->idioma_activo('en') == 1)
				{
					$this->lingua = 'en';
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else if($parts[0] == 'it'){
				if( $this->idioma_activo('it') == 1)
				{
					$this->lingua = 'it';
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else if($parts[0] == 'es'){
				if( $this->idioma_activo('es') == 1)
				{
					$this->lingua = 'es';
					
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else if($parts[0] == 'de'){
				if( $this->idioma_activo('de') == 1)
				{
					$this->lingua = 'de';
				}
				else
				{
			 		$this->lingua = $this->_DLANG;
				}
			} else {
				$this->lingua =  $this->lixlpixel_detect_lang();
			}
		}
		
		$this->lingua_id = $this->getLinguaID($this->lingua);
    }
	
    function getLinguaID($my_lingua)
    {
    	$sql = "SELECT id FROM linguas where acronimo='$my_lingua'";
		$result = mysql_query($sql);
		if(!$result)
		{
			if(Debug)
				echo  mysql_error() . " @ function getLinguaID <br />";
			echo 'Por motivos técnicos não foi possível processar o seu pedido, por favor informe o administrador se o erro persistir';
			die();
			exit;
		}
		
		if(mysql_num_rows($result) != 1)
		{
			return 0;
		}
		
        $my_id = mysql_fetch_array($result);
        return $my_id['id']; 
    }
	
	function set($varname, $value, $overwrite=false) 
	{
        if (isset($this->vars[$varname]) == true AND $overwrite == false) {
                trigger_error ('Unable to set var `' . $varname . '`. Already set, and overwrite not allowed.', E_USER_NOTICE);
                return false;
        }

        $this->vars[$varname] = $value;
        return true;
	}
	
	function setPath($my_path){
		$this->path = $my_path;
	}
	
	function setLingua($my_lingua)
	{
		$this->lingua = $my_lingua;
		setcookie('ola', $my_lingua);
	}
	
	function idioma_activo($my_lingua)
	{
		
		//$my_lingua = $this->getLinguaID($my_lingua);
		$sql = "SELECT * FROM linguas where status='1' and acronimo='$my_lingua'";
		$result = mysql_query($sql);
		if(!$result)
		{
			if(Debug)
				echo  mysql_error() . " @ function idioma_activo <br />";
			echo 'Por motivos técnicos não foi possível processar o seu pedido, por favor informe o administrador se o erro persistir';
			die();
			exit;
		}
		
		if(mysql_num_rows($result) != 1)
		{
			return 0;
		}
		
        return 1;
	}
	
	function getLingua()
	{
		return $this->lingua;
	}
	
	function getLingua_id()
	{
		return $this->lingua_id;
	}
	
	function lixlpixel_get_env_var($Var)
	{
		if(empty($GLOBALS[$Var]))
		{
			$GLOBALS[$Var] = (!empty($GLOBALS['_SERVER'][$Var])) ? $GLOBALS['_SERVER'][$Var] : 
			(!empty($GLOBALS['HTTP_SERVER_VARS'][$Var])) ? $GLOBALS['HTTP_SERVER_VARS'][$Var] : '';
		}
	}
	
	
	
	function get_linguas_disponiveis()
	{
		
		$sql = "SELECT * FROM linguas where status='1'";
		$result = mysql_query($sql);
		if(!$result)
		{
			if(Debug)
				echo  mysql_error() . " @ function get_linguas_disponiveis <br />";
			echo 'Por motivos técnicos não foi possível processar o seu pedido, por favor informe o administrador se o erro persistir';
			die();
			exit;
		}
		
		if(mysql_num_rows($result) == 0)
		{
			return 0;
		}
		
		$content = Array();
		while($linha = mysql_fetch_array($result))
		{
			array_push($content, $linha);
		}
        return $content;
	}
	
	function CarregarIdioma()
	{
		//Carrega todas as traduções do ficheiro php
		require 'nebulae/idiomas/' . $this->getLingua() . '/idioma.php';
		// Carrega os campos do site traduzidos da base de dados na lingua
		$sql = "SELECT * FROM site, site_campo where site_campo.id_site=site.id and site_campo.lingua_id='$this->lingua_id'";
		$result = mysql_query($sql);
		if(!$result)
		{
			if(Debug)
				echo  mysql_error() . " @ function Carregar_Idioma <br />";
			echo 'Por motivos técnicos não foi possível processar o seu pedido, por favor informe o administrador se o erro persistir';
			die();
			exit;
		}
		
		if(mysql_num_rows($result) == 0)
		{
			return 0;
		}
		
		$contents = Array(); 
		while($campo = mysql_fetch_array($result) )
		{
			array_push($contents, $campo['campo']);
			$contents[$campo['campo']] = $campo['valor'];
		}
		
        return $contents;
	}
	function lixlpixel_detect_lang()
	{
		// Detect HTTP_ACCEPT_LANGUAGE & HTTP_USER_AGENT.
		$this->lixlpixel_get_env_var('HTTP_ACCEPT_LANGUAGE');
		$this->lixlpixel_get_env_var('HTTP_USER_AGENT');
		$_AL=strtolower($GLOBALS['HTTP_ACCEPT_LANGUAGE']);
		$_UA=strtolower($GLOBALS['HTTP_USER_AGENT']);

		// Try to detect Primary language if several languages are accepted.
		foreach($this->_LANG as $K)
		{
			if(strpos($_AL, $K) === 0)
				return $K;
		}
		
		// Try to detect any language if not yet detected.
		if(isset($GLOBALS['_LANG']))
		foreach($GLOBALS['_LANG'] as $K)
		{
			if(strpos($_AL, $K) !== false)
				return $K;
		}

		foreach($this->_LANG as $K)
		{
			if(preg_match("/[\[\( ]{$K}[;,_\-\)]/",$_UA))
				return $K;
		}
		
		// Return default language if language is not yet detected.
		return $this->_DLANG;
	}
	
	
}

?>
